iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
佛心分享-IT 人自學之術

C++探險家系列 第 27

Day 27 書籍借還系統專題製作

  • 分享至 

  • xImage
  •  
// 顯示會員資料
void MEMBER::show() {
    if (index == 0) {
        cout << "EMPTY!" << endl;
    } else {
        cout << "編號\t會員名稱" << endl;
        for (int i = 0; i < index; i++) {
            if (DataBase[i] == "") continue;
            cout << i << "\t" << DataBase[i] << endl;
        }
    }
    return;
}

// 顯示書籍資料
void BOOK::show(MEMBER m) {
    if (index == 0) {
        cout << "EMPTY!" << endl;
    } else {
        cout << "編號\t書籍名\t借出者" << endl;
        for (int i = 0; i < index; i++) {
            if (DataBase[i].i == -1) continue;
            cout << DataBase[i].i << "\t" << DataBase[i].name;
            if (DataBase[i].rentBy != -1) {
                cout << "\t" << m.DataBase[DataBase[i].rentBy];
            }
            cout << endl;
        }
    }
    return;
}

// 新增DVD資料
bool DVD::addDVD(string s, int r, int l) {
    if (add(s, r)) {
        level[index - 1] = l;
        return true;
    }
    return false;
}

// 儲存會員資料
void MEMBER::writeFile() {
    ofstream my_read_file("MemberList.txt"); // 開啟檔案
    for (int count = 0; count < index; count++) {
        my_read_file << DataBase[count] << endl;
    }
    my_read_file.close();
    return;
}

// 儲存書籍資料
void BOOK::writeFile() {
    ofstream my_read_file("BookList.txt"); // 開啟檔案
    for (int count = 0; count < index; count++) {
        if (DataBase[count].i == -1) continue;
        my_read_file << DataBase[count].name << " " << DataBase[count].rentBy << endl;
    }
    my_read_file.close();
    return;
}

// 顯示DVD資料
void DVD::showDVD(MEMBER m) {
    if (index == 0) {
        cout << "EMPTY!" << endl;
    } else {
        cout << "編號\tDVD名稱\t借出者\t分級" << endl;
        for (int i = 0; i < index; i++) {
            if (DataBase[i].i == -1) continue;
            cout << DataBase[i].i << "\t" << DataBase[i].name;
            if (DataBase[i].rentBy != -1) {
                cout << "\t" << m.DataBase[DataBase[i].rentBy];
            } else {
                cout << "\t";
            }
            if (level[i] == 0) {
                cout << "\t非限制級" << endl;
            } else if (level[i] == 1) {
                cout << "\t限制級" << endl;
            }
        }
    }
    return;
}

// 檢查會員是否存在
bool MEMBER::exist(int m) {
    if (m >= index || DataBase[m] == "") {
        cout << "無此會員" << endl;
        return false;
    }
    return true;
}

// 新增會員
bool MEMBER::add(string s) {
    if (index == MaxNum) return false;
    DataBase[index] = s;
    index++;
    cout << "新增會員" << endl << "編號:" << index - 1 << endl;
    return true;
}

// 刪除會員
bool MEMBER::remove(int m) {
    if (!exist(m)) return false;
    DataBase[m] = "";
    writeFile();
    return true;
}

// 檢查書籍是否存在
bool BOOK::exist(int book) {
    if (book >= index || DataBase[book].i == -1) {
        cout << "查無此書" << endl;
        return false;
    }
    return true;
}

// 新增書籍資料
bool BOOK::add(string s, int r) {
    if (index == MaxNum) return false;
    DataBase[index].i = index;
    DataBase[index].name = s;
    DataBase[index].rentBy = r;
    index++;
    cout << "新增書籍" << endl << "編號:" << index - 1 << endl;
    return true;
}

// 刪除書籍
bool BOOK::remove(int book) {
    if (!exist(book)) return false;
    DataBase[book].i = -1;
    return true;
}

// 借出書籍
bool BOOK::rent(int man, int book) {
    if (!exist(book)) return false;
    if (DataBase[book].rentBy != -1) {
        cout << "此書已外借!" << endl;
        return false;
    } else {
        DataBase[book].rentBy = man;
        return true;
    }
}

// 歸還書籍
bool BOOK::back(int man, int book) {
    if (!exist(book)) return false;
    if (DataBase[book].rentBy != man) {
        cout << "此會員並未借此書!" << endl;
        return false;
    } else {
        DataBase[book].rentBy = -1;
        return true;
    }
}

說明:
這段程式碼管理會員、書籍和DVD的資訊。MEMBER 類別負責會員的新增、刪除、顯示及檢查功能,並能將會員資料寫入檔案;BOOK 類別管理書籍的新增、刪除、借還書籍,且能將書籍資訊儲存到檔案;DVD 類別則擴展書籍管理功能,並加入 DVD 的分級功能。每個類別都提供顯示資料的方法,且支援檢查是否存在相關物件(會員或書籍)。

!!以上內容是跟著第一次學C++第二版這本書一起跟著實作!!
今天完成了這一個專題小實作,利用三天的時間來撰寫執行完畢,蠻有成就感的,希望接下來天可以繼續順利完成!


上一篇
Day 26 書籍借還系統專題製作
下一篇
Day 28 記帳專題製作
系列文
C++探險家30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言